iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0

前言

前面幾個選擇器是比較基礎簡單可以理解的,到這裡就開始需要思考一下…

今天還有好多選擇器的規範,就不多說直接開始。


Part.2 介紹的基本選擇器如下

  • Attribute selectors 屬性選擇器
  • CSS 屬性選擇器

Attribute selectors 屬性選擇器

在前幾天的HTML有提到< input >,如果稍稍有點記不得可以上來前幾天查詢"Day5 Input"

在表格< input >裡面,如果想讓網頁表格輸入進去的字體更改顏色,是可以像前面一樣,使用< class >來命名更改,但這樣表示每一個< input >標籤都需要再額外新增< class >命名,這樣太複雜,當然會希望用最快的速度可以一次統一更改。

先在HTML裡開一個表單,輸入名字跟電話:

<body>
    <h1>通訊錄</h1>
    <form action="" method="">
  <label for="name">姓名:</label>
      <input
        minlength="2"
        maxlength="50"
        id="name"
        type="text"
        name="InputName"
        placeholder="請輸入真實姓名"
        required
      />
      <br />
      <label for="tel">電話:</label>
      <input type="text" id="tel" name="InputTel" required>
      <br/>
      <label for="email">email:</label>
      <input type="email" id="email" required>
  </body>

在CSS檔案裡,針對< input type=”text” >的標籤做設定。

舉例:希望打在表格< type=“text” >裡面的字,可以呈現royalblue的顏色。

input[type="text"] {
  color: royalblue;
}

下圖可以看到因為email那行的< type=”email” >,所以輸入的內容文字不會更改顏色,其他姓名跟電話輸入的內容都有更改成功。
https://ithelp.ithome.com.tw/upload/images/20220924/20151470tnLs0UjIPL.jpg


CSS屬性選擇器

元素[屬性]{宣告;}
元素[屬性="值"]{宣告;}
元素[屬性~="文字"]{宣告;}
元素[屬性|="文字"]{宣告;}
元素[屬性^="文字"]{宣告;}
元素[屬性$="文字"]{宣告;}
元素[屬性*="文字"]{宣告}
  1. 元素[ 屬性 ]{ 宣告; }:對有設定指定屬性的元素進行CSS樣式設定。

像是可以選擇具有< class >屬性的< p >段落,或具有< alt >屬性的< img >元素

<head>
<title>鐵人網頁挑戰</title>
    <style>
      p[class] {
        font-size: 21px;
        color: blue;
      }
      img[alt] {
        border: 2px solid gold;
      }
    </style>
  </head>
  <body>
    <p>這個週末想去咖啡廳</p>
    <p class="food">下圖這是咖啡</p>
    <img src="coffee.jpg" alt="this is mountain" width="200px" />
    <p class="food">還想配個小蛋糕一起享用</p>
  </body>

在下圖的網頁上可以看到設定是< p >段落的< class=”food” >就會字體大小更改成21像素,顏色也更改為藍色,< img >元素裡面有設定< alt >那就會新增「2像素、實體、金色的邊框。」
https://ithelp.ithome.com.tw/upload/images/20220924/20151470VovB2JkHOY.jpg

  1. 元素[ 屬性="值" ]{ 宣告; }:跟上面的差異是對指定的項目分類更細有設定指定屬性以及值的元素進行CSS樣式設定。
<head>
<style>
      p[class="food"] {
        font-size: 21px;
        color: blue;
      }
    </style>
  </head>
  <body>
    <p>這個週末想去咖啡廳</p>
    <p class="food">下圖這是咖啡</p>
    <img src="coffee.jpg" alt="this is coffee" width="200px" />
    <p class="food">還想配個小蛋糕一起享用</p>
    <p class="pets">咖啡廳裡還有小貓</p>
    <p class="pets">還有小狗</p>
  </body>

下圖網頁上也可以看得出來,指定< class=”food” >的才會更改字體大小跟顏色,另外兩行指定其他的就不會更改。
https://ithelp.ithome.com.tw/upload/images/20220924/20151470F85ZRbACoX.jpg

  1. 元素[ 屬性~="文字" ]{ 宣告; }:如果想要在進一步嚴格規定,所選擇的文字必須完全符合才是我們的目標對象。

上面三樣的差異,假設情況是在餐桌上

  • 第一個就像是指定桌上的香蕉,所以包含桌上所有的香蕉。
  • 第二個就像是指定桌上盤子上的香蕉,所以桌上沒有在盤子上的香蕉就不包含,有在盤子上的才算。
  • 第三個就像是指定桌上盤子上的小香蕉,所以除了需要在盤子裡,還要是小香蕉,大香蕉不算。

指定的分類會因為上面的嚴格規定,分類的更加詳細。

  1. 元素[ 屬性^="特定文字開頭文字" ]{ 宣告; }:就像是設定只要超連結這些「 https : //」開頭的網頁都更改設定:
<head>
<style>
      a[href^="https://"]
      {
        color: brown;
        border: 2px solid gold;
      }
    </style>
  </head>
  <body>
    <img src="coffee.jpg" alt="this is a coffee" width="250px" />
    <br />
    <a href="https://google.com">google</a>
  </body>

網頁上可以看到我想要包含「 https:// 」的內容都統一更改,所以下面< a >裡面的超連結就會更改。
https://ithelp.ithome.com.tw/upload/images/20220924/20151470SmaOFbtmt8.jpg

  1. 元素[ 屬性|="文字" ]{ 宣告; }:這個則是選出具有特定文字開頭加上「-」,就像是我們可能會設定link-1,或是link-2等等的。
  2. 元素[ 屬性$="特定文字結尾" ]{ 宣告; }:像是我們如果想要指定圖片裡面只要是使用.png檔案的圖片,統一圖片大小呈現的樣子,就可以使用這個。
  3. 元素[ 屬性*="包含特定文字"]{宣告}:只要包含特定文字都會是我們選擇的目標對象

用下圖幾句話設定不同的class來進行舉例:

<body>
    <p class="redText">今天天氣很好</p>

    <p class="orangeText">天氣溫度25度</p>

    <p class="yellowText">我跟同學要出去玩</p>

    <p class="Textred">想要午餐吃義大利麵</p>

    <p class="Text-1">下午茶吃蛋糕配咖啡</p>

    <p class="Text-2">晚餐吃韓式炸雞</p>
  </body>
/* 元素[ 屬性|="文字" ]{ 宣告; } */
p[class|="Text"] {
  color: brown;
}
/* 元素[ 屬性$="特定文字結尾" ]{ 宣告; } */
p[class$="Text"] {
  color: yellow;
}
/* 元素[ 屬性*="包含特定文字"]{宣告} */
p[class*="red"] {
  color: red;
}

可以看到下圖

  • 根據HTML裡面< p >段落的設定,有Text開頭加上「-」,就變成brown的顏色。

  • 使用「 $ 」符號,來表示有Text結尾就都變成黃色。

因為第一行的今天天氣很好,裡面是< class=”redText“ >,< class >裡面有包含了red,所以雖然前面有Text結尾,照理說應該要變成黃色,但因為最後一個特定文字,根據CSS階層式的規定,讓前面黃色的字被覆蓋變成紅色字體。
https://ithelp.ithome.com.tw/upload/images/20220924/20151470nRSMpXXn9x.jpg

那如果結尾變成黃色跟特定字變成紅色調換順序的話,就換成紅色字替被覆蓋,變成黃色,如下圖所示。
https://ithelp.ithome.com.tw/upload/images/20220924/201514704XrUs4YWAh.jpg


第九天挑戰完成

果然選擇器的規則好多,依舊無法順利在這篇都發完

在實際動手嘗試用不同選擇器,看到變化的當下還是會覺得很有趣,一直會想說…

那如果這樣改的話呢?

如果這個先放前面的話呢?會有什麼不同嗎??

明天看起來是選擇器的最後一趴了!!


上一篇
Day 8 CSS Selector part 1
下一篇
Day 10 CSS Selector 最後一趴
系列文
一趟30天網頁設計的學習冒險#explain like i‘m five 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言